package app;

import boundary.IUzivatelFacade;
import boundary.UzivatelFacade;
import entities.Uzivatel;
import exceptions.UserNotFoundException;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.ejb.Stateful;

/**
 * Beana pro autentizaci uživatele.
 *
 * @author Michal Vachler
 */
@Stateful
public class Autentizace {

    @EJB(beanInterface = IUzivatelFacade.class)
    private IUzivatelFacade UzivatelFacade;

    void setUzivatelFacade(IUzivatelFacade uzivatelFacade) {
        this.UzivatelFacade = uzivatelFacade;
    }

    /**
     * Metoda vrací uživatele na základě loginu a shodujícího se hesla.
     *
     * @param login String
     * @param heslo String
     * @return Uzivatel
     */
    // upraveno databazistama kvuli exceptions, kdyztak si to upravte dle sebe
    public Uzivatel prihlasitSe(String login, String heslo) {
        Uzivatel uzivatel;
        try {
            uzivatel = UzivatelFacade.findUserByLogin(login);
             if (uzivatel.getHeslo().equals(heslo)) {
                return uzivatel;
            } else {
                return null;
            }
        } catch (UserNotFoundException ex) {
            return null;
        }
    }
    
    // upraveno databazistama kvuli exceptions, kdyztak si to upravte dle sebe    
    public boolean registrace(Uzivatel uzivatel) {
        try {
            UzivatelFacade.findUserByLogin(uzivatel.getLogin());
            return false;
        } catch (UserNotFoundException ex) {
            UzivatelFacade.create(uzivatel);
            return true;
        }
    }

    /**
     * Hash SHA-256
     *
     * @param text String
     * @return String
     */
    public String sha256(String text) {
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-256");
            md.update(text.getBytes("UTF-8"));
            byte[] digest = md.digest();
            BigInteger bigInt = new BigInteger(1, digest);
            String result = bigInt.toString(16);
            return result;
        } catch (NoSuchAlgorithmException | UnsupportedEncodingException ex) {
            Logger.getLogger(Autentizace.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }
}
